<?php

require_once 'classes/Plainte.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements de plaintes
 * @author Zikrija
 * @date 04.05.2012
 */
class SCplainte {
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute une plainte
    * @param Plainte Plainte à ajouter
    */
    public function ajouter(Plainte $unePlainteAAjouter) {
        try{

            $query =  $this->db->prepare("INSERT INTO plainte " .
                "(date, description, statut, animal_id, personne_id) VALUES(".
                ":date, :description, :statut, :animal_id, :personne_id)");

            $query->execute(array(
                'date'             => $unePlainteAAjouter->getDate() ,
                'description'      => $unePlainteAAjouter->getDescription(),
                'statut'           => $unePlainteAAjouter->getStatut() ,
                'animal_id'        => $unePlainteAAjouter->getAnimal_id() ,
                'personne_id'      => $unePlainteAAjouter->getPersonne_id()    
                ));
            $unePlainteAAjouter->setId($this->db->lastInsertId());
            $query->closeCursor();
        }
        catch(PDOException $e){
            return new Message("Plainte non ajoutée: ".$e->getMessage());
        }
        return $unePlainteAAjouter;
   }
    /**
     * Methode permettant de modifier une plainte
     * @param Plainte La plainte $ modifier
     * @return boolean 
     */
    public function modifier(Plainte $unePlainteAModifier){
        try{

            $query =  $this->db->prepare("UPDATE plainte SET ".
                "date = :date, description = :description , statut = :statut, ".
                "animal_id = :animal_id, personne_id = :personne_id ".
                "WHERE id = :id");

            $query->execute(array(
                'id'            => $unePlainteAModifier->getId(),
                'date'          => $unePlainteAModifier->getDate(),
                'description'   => $unePlainteAModifier->getDescription() ,
                'statut'        => $unePlainteAModifier->getStatut(),
                'animal_id'     => $unePlainteAModifier->getAnimal_id(),
                'personne_id'   => $unePlainteAModifier->getPersonne_id()
            ));

            $query->closeCursor();


        }
        catch(PDOException $e){
            return new Message("Plainte non modifiée: ".$e->getMessage());
        }
        return $unePlainteAModifier;
    }
    /**
     * Methode permettant de supprimer une plainte
     * @param int id de la plainte à supprimer
     * @return boolean 
     */
    public function supprimer($idPlainteASupprimer){
        try{
            $query = $this->db->prepare("DELETE FROM plainte WHERE id = :id");
            $query->execute(array(
                'id'           => $idPlainteASupprimer
            ));            
            $query->closeCursor();
            
            $message = new Message("Plainte supprimée"); 
        }
        catch(PDOException $e){
            print($e->getMessage());
            $message = new Message("Plainte non supprimée");
        }
        return $message;
    }
   
      /**
     *
     * @param plainte plainteALister de recherche sous forme d'objet plainte
     * @return un tableau d'objet plainte
     */
    public function lister(Plainte $plainteALister){
        try{
            $sql="SELECT * FROM plainte ";
            $sql_Where="WHERE";
            if($plainteALister!=NULL)
            {
                if($plainteALister->getId()!=NULL)
                    $sql_Where.=" id = ".$plainteALister->getId()." AND ";
                if($plainteALister->getStatut()!=NULL)
                    $sql_Where.=" statut = '".$plainteALister->getStatut()."' AND ";
                if($plainteALister->getAnimal_id()!=NULL)
                    $sql_Where.=" animal_id = '".$plainteALister->getAnimal_id()."' AND ";
                if($plainteALister->getPersonne_id()!=NULL)
                    $sql_Where.=" personne_id = '".$plainteALister->getPersonne_id()."' AND ";
                
            }         


            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where." ORDER BY id;";
            $lesPlaintesTrouvees=NULL;
            $unePlainteLue=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch())
            {   
                $unePlainteLue = new plainte($row['id'], $row['date'], $row['description'], $row['statut'], 
                        $row['animal_id'], $row['personne_id']);

                $lesPlaintesTrouvees[]=$unePlainteLue;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesPlaintesTrouvees=NULL;
        }
        return $lesPlaintesTrouvees;
    }
   
     /**
     * 
     * @param Plainte de recherche sous forme d'objet plainte
     * @return un tableau d'objet Plainte
     */
    public function listerSelonDate($dateDebut, $dateFin){
        try{
            

            $debut = substr($dateDebut, 6, 4)."-".substr($dateDebut, 3, 2)."-".substr($dateDebut, 0, 2);
            $fin   = substr($dateFin, 6, 4)."-".substr($dateFin, 3, 2)."-".substr($dateFin, 0, 2);
            
            $sql="SELECT * FROM plainte WHERE date BETWEEN '".$debut."' AND '".$fin."' ORDER BY date;";
            
            
            $lesPlaintesTrouvees=NULL;
            $unePlainteLue=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch())
            {   
                $unePlainteLue = new Plainte($row['id'], $row['date'], $row['description'], $row['statut'], $row['animal_id'], $row['personne_id']);

                $lesPlaintesTrouvees[]=$unePlainteLue;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesPlaintesTrouvees=NULL;
        }
        return $lesPlaintesTrouvees;
    } 
}

?>
